<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>Unicode字符属性</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="regexp.reference.escape.html">转义序列(反斜线)</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="regexp.reference.anchors.html">锚</a></div>
 <div class="up"><a href="reference.pcre.pattern.syntax.html">PCRE 正则语法</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="regexp.reference.unicode" class="section">
  <h2 class="title">Unicode字符属性</h2>
  <p class="para">
  自从 PHP 4.4.0 和 5.1.0，
  三个额外的转义序列在选用 <em class="emphasis">UTF-8模式</em>时用于匹配通用字符类型。他们是：
  </p>
  <dl>

   
    <dt>
<em class="emphasis">\p{xx}</em></dt>

    <dd>
<span class="simpara">一个有属性 xx 的字符</span></dd>

   
   
    <dt>
<em class="emphasis">\P{xx}</em></dt>

    <dd>
<span class="simpara">一个没有属性 xx 的字符</span></dd>

   
   
    <dt>
<em class="emphasis">\X</em></dt>

    <dd>
<span class="simpara">一个扩展的 Unicode 字符</span></dd>

   
  </dl>

  <p class="para">
  上面 <em>xx</em> 代表的属性名用于限制 Unicode 通常的类别属性。
  每个字符都有一个这样的确定的属性，通过两个缩写的字母指定。
   为了与 perl 兼容，
  可以在左花括号 { 后面增加 ^ 表示取反。比如：
  <em>\p{^Lu}</em> 就等同于 <em>\P{Lu}</em>。
  </p>
  <p class="para">
  如果通过 <em>\p</em> 或 <em>\P</em> 仅指定了一个字母，它包含所有以这个字母开头的属性。
  在这种情况下，花括号的转义序列是可选的。
  </p>
  <div class="informalexample">
   <div class="example-contents">
<div class="cdata"><pre>
\p{L}
\pL
</pre></div>
   </div>

  </div>
  <table class="doctable table">
   <caption><strong>支持的Unicode属性</strong></caption>
   
    <thead>
     <tr>
      <th>Property</th>
      <th>Matches</th>
      <th>Notes</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td><em>C</em></td>
      <td>Other</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Cc</em></td>
      <td>Control</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Cf</em></td>
      <td>Format</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Cn</em></td>
      <td>Unassigned</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Co</em></td>
      <td>Private use</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Cs</em></td>
      <td>Surrogate</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>L</em></td>
      <td>Letter</td>
      <td>
       Includes the following properties: <em>Ll</em>, 
       <em>Lm</em>, <em>Lo</em>, <em>Lt</em> and 
       <em>Lu</em>.
      </td>
     </tr>

     <tr>
      <td><em>Ll</em></td>
      <td>Lower case letter</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Lm</em></td>
      <td>Modifier letter</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Lo</em></td>
      <td>Other letter</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Lt</em></td>
      <td>Title case letter</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Lu</em></td>
      <td>Upper case letter</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>M</em></td>
      <td>Mark</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Mc</em></td>
      <td>Spacing mark</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Me</em></td>
      <td>Enclosing mark</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Mn</em></td>
      <td>Non-spacing mark</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>N</em></td>
      <td>Number</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Nd</em></td>
      <td>Decimal number</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Nl</em></td>
      <td>Letter number</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>No</em></td>
      <td>Other number</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>P</em></td>
      <td>Punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Pc</em></td>
      <td>Connector punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Pd</em></td>
      <td>Dash punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Pe</em></td>
      <td>Close punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Pf</em></td>
      <td>Final punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Pi</em></td>
      <td>Initial punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Po</em></td>
      <td>Other punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Ps</em></td>
      <td>Open punctuation</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>S</em></td>
      <td>Symbol</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Sc</em></td>
      <td>Currency symbol</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Sk</em></td>
      <td>Modifier symbol</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Sm</em></td>
      <td>Mathematical symbol</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>So</em></td>
      <td>Other symbol</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Z</em></td>
      <td>Separator</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Zl</em></td>
      <td>Line separator</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Zp</em></td>
      <td>Paragraph separator</td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><em>Zs</em></td>
      <td>Space separator</td>
      <td class="empty">&nbsp;</td>
     </tr>

    </tbody>
   
  </table>

  <p class="para">
  <em>InMusicalSymbols</em> 等扩展属性在 PCRE 中不支持
  </p>
  <p class="para">
  指定大小写不敏感匹配对这些转义序列不会产生影响，比如，
  <em>\p{Lu}</em> 始终匹配大写字母。
  </p>
  <p class="para">
      Unicode 字符集在具体文字中定义。使用文字名可以匹配这些字符集中的一个字符。例如：
  </p>
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara"><em>\p{Greek}</em></span>
   </li>
   <li class="listitem">
    <span class="simpara"><em>\P{Han}</em></span>
   </li>
  </ul>
  <p class="para">
   不在确定文字中的则被集中到 <em>Common</em>。当前的文字列表中有：
  </p>
  <table class="doctable table">
   <caption><strong>支持的文字</strong></caption>
   
    <tbody class="tbody">
     <tr>
      <td><em>Arabic</em></td>
      <td><em>Armenian</em></td>
      <td><em>Avestan</em></td>
      <td><em>Balinese</em></td>
      <td><em>Bamum</em></td>
     </tr>

     <tr>
      <td><em>Batak</em></td>
      <td><em>Bengali</em></td>
      <td><em>Bopomofo</em></td>
      <td><em>Brahmi</em></td>
      <td><em>Braille</em></td>
     </tr>

     <tr>
      <td><em>Buginese</em></td>
      <td><em>Buhid</em></td>
      <td><em>Canadian_Aboriginal</em></td>
      <td><em>Carian</em></td>
      <td><em>Chakma</em></td>
     </tr>

     <tr>
      <td><em>Cham</em></td>
      <td><em>Cherokee</em></td>
      <td><em>Common</em></td>
      <td><em>Coptic</em></td>
      <td><em>Cuneiform</em></td>
     </tr>

     <tr>
      <td><em>Cypriot</em></td>
      <td><em>Cyrillic</em></td>
      <td><em>Deseret</em></td>
      <td><em>Devanagari</em></td>
      <td><em>Egyptian_Hieroglyphs</em></td>
     </tr>

     <tr>
      <td><em>Ethiopic</em></td>
      <td><em>Georgian</em></td>
      <td><em>Glagolitic</em></td>
      <td><em>Gothic</em></td>
      <td><em>Greek</em></td>
     </tr>

     <tr>
      <td><em>Gujarati</em></td>
      <td><em>Gurmukhi</em></td>
      <td><em>Han</em></td>
      <td><em>Hangul</em></td>
      <td><em>Hanunoo</em></td>
     </tr>

     <tr>
      <td><em>Hebrew</em></td>
      <td><em>Hiragana</em></td>
      <td><em>Imperial_Aramaic</em></td>
      <td><em>Inherited</em></td>
      <td><em>Inscriptional_Pahlavi</em></td>
     </tr>

     <tr>
      <td><em>Inscriptional_Parthian</em></td>
      <td><em>Javanese</em></td>
      <td><em>Kaithi</em></td>
      <td><em>Kannada</em></td>
      <td><em>Katakana</em></td>
     </tr>

     <tr>
      <td><em>Kayah_Li</em></td>
      <td><em>Kharoshthi</em></td>
      <td><em>Khmer</em></td>
      <td><em>Lao</em></td>
      <td><em>Latin</em></td>
     </tr>

     <tr>
      <td><em>Lepcha</em></td>
      <td><em>Limbu</em></td>
      <td><em>Linear_B</em></td>
      <td><em>Lisu</em></td>
      <td><em>Lycian</em></td>
     </tr>

     <tr>
      <td><em>Lydian</em></td>
      <td><em>Malayalam</em></td>
      <td><em>Mandaic</em></td>
      <td><em>Meetei_Mayek</em></td>
      <td><em>Meroitic_Cursive</em></td>
     </tr>

     <tr>
      <td><em>Meroitic_Hieroglyphs</em></td>
      <td><em>Miao</em></td>
      <td><em>Mongolian</em></td>
      <td><em>Myanmar</em></td>
      <td><em>New_Tai_Lue</em></td>
     </tr>

     <tr>
      <td><em>Nko</em></td>
      <td><em>Ogham</em></td>
      <td><em>Old_Italic</em></td>
      <td><em>Old_Persian</em></td>
      <td><em>Old_South_Arabian</em></td>
     </tr>

     <tr>
      <td><em>Old_Turkic</em></td>
      <td><em>Ol_Chiki</em></td>
      <td><em>Oriya</em></td>
      <td><em>Osmanya</em></td>
      <td><em>Phags_Pa</em></td>
     </tr>

     <tr>
      <td><em>Phoenician</em></td>
      <td><em>Rejang</em></td>
      <td><em>Runic</em></td>
      <td><em>Samaritan</em></td>
      <td><em>Saurashtra</em></td>
     </tr>

     <tr>
      <td><em>Sharada</em></td>
      <td><em>Shavian</em></td>
      <td><em>Sinhala</em></td>
      <td><em>Sora_Sompeng</em></td>
      <td><em>Sundanese</em></td>
     </tr>

     <tr>
      <td><em>Syloti_Nagri</em></td>
      <td><em>Syriac</em></td>
      <td><em>Tagalog</em></td>
      <td><em>Tagbanwa</em></td>
      <td><em>Tai_Le</em></td>
     </tr>

     <tr>
      <td><em>Tai_Tham</em></td>
      <td><em>Tai_Viet</em></td>
      <td><em>Takri</em></td>
      <td><em>Tamil</em></td>
      <td><em>Telugu</em></td>
     </tr>

     <tr>
      <td><em>Thaana</em></td>
      <td><em>Thai</em></td>
      <td><em>Tibetan</em></td>
      <td><em>Tifinagh</em></td>
      <td><em>Ugaritic</em></td>
     </tr>

     <tr>
      <td><em>Vai</em></td>
      <td><em>Yi</em></td>
      <td class="empty">&nbsp;</td>
      <td class="empty">&nbsp;</td>
      <td class="empty">&nbsp;</td>
      <td class="empty">&nbsp;</td>
     </tr>

    </tbody>
   
  </table>

  <p class="para">
  <em>\X</em> 转义匹配任意数量的 Unicode 字符。
  <em>\X</em> 等价于 <em>(?&gt;\PM\pM*)</em>
  </p>
  <p class="para">
  也就是说，它匹配一个没有 ”mark” 属性的字符，紧接着任意多个由 ”mark” 属性的字符。
  并将这个序列认为是一个原子组(详见下文)。
  典型的有 ”mark” 属性的字符是影响到前面的字符的重音符。
  </p>
  <p class="para">
  用 Unicode 属性来匹配字符并不快，
  因为 PCRE 需要去搜索一个包含超过 15000 字符的数据结构。
  这就是为什么在 PCRE中 要使用传统的转义序列<em>\d</em>、
  <em>\w</em> 而不使用 Unicode 属性的原因。
  </p>
 </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="regexp.reference.escape.html">转义序列(反斜线)</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="regexp.reference.anchors.html">锚</a></div>
 <div class="up"><a href="reference.pcre.pattern.syntax.html">PCRE 正则语法</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
